/**
 * 工具类函数实现，有设置fd非阻塞，打印错误并退出
 * @author: sundx
 * @date: 2020-06-06 22:31:29
 * @Last Modified by: sundx
 * @Last Modified time: 2020-06-08 01:36:40
 */

#ifndef __UTILITIES_H__
#define __UTILITIES_H__

#include <arpa/inet.h>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <errno.h>
#include <fcntl.h>
#include <iostream>
#include <netinet/in.h>
#include <string.h>
#include <string>
#include <strings.h>
#include <sys/epoll.h>
#include <sys/sendfile.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <unistd.h>

void printError(const char *errorInfo); // 对应于设置errno类型

int setNoblocking(int fd); //设置fd非阻塞

//将fd挂载到epoll红黑树
void addFdOnEpollTree(int epollFd, int fd, bool oneShot);

void show_error(int connfd, const char *info); //向客户端打印错误

void modFd(int epollFd, int fd, int ev); //修改红黑树上监听事件

void rmFd(int epollFd, int fd); //删除红黑树上的Fd

void send404(int fd, const char *filename = "e404.html"); //发送404

const char *get_file_type(const char *name);

#endif